package summary.user;

import java.io.*;
import java.util.ArrayList;

/**
 * @Author admin
 * @Date 2019/4/16 14:12
 * 工具类的具体实现类，用文件方式
 * 字节流：一般用来操作图片和视频
 *       基本字节输入输出流 FileInputStream/FileOutputStream
 *       字节缓冲流：BufferedInputStream/BufferedOutputStream
 *       效率最高的是：用字节缓冲流一次读写一个字节数组
 * 字符流：一般用来操作文本
 *         基本字符流：FileReader/FileWriter
 *         字符缓冲流：BufferedReader/BufferedWriter
 *         效率最高的是用字符缓冲流一次读写一行文本
 *         若出现乱码（编码问题），则需要用到转换流：InputStreamReader/OutputStreamWriter
 */
public class UserDaoIO implements UserDao{

    @Override
    public void register(User user) {
        /*把user对象写入文件：
        * 用户名和密码 email之间分隔符
        * 一个用户放一行
        * 不用考虑用户名是否重复*/
        /*使用字符缓冲流一次读写一行文本，默认使用utf-8，所以不用转换流*/
        Writer out = null;
        BufferedWriter bw = null;
        try {
            out = new FileWriter("user.txt",true);
            bw = new BufferedWriter(out);
            String s = user.getName()+"-"+user.getPassword()+"-"+user.getEmail();
            bw.write(s);
            bw.newLine();
            bw.flush();
            System.out.println("注册成功！");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (bw!=null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public User login(String name, String password) {
        /*循环读取文件中所有行：
        * 一行文本读取出来后，分割好
        * 比较用户名和密码是否一致
        * 若一致，封装成user对象，并返回*/
        Reader in = null;
        BufferedReader br = null;
        try {
            in = new  FileReader("user.txt");
            br = new BufferedReader(in);
            String line;
            while ((line=br.readLine())!=null){
               String[] s = line.split("-");
               if (s[0].equals(name)&&s[1].equals(password)){
                   User user = new User(s[0],s[1],s[2]);
                   return user;
               }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (br!=null){
                    br.close();
                }
                if (in!=null){
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return null;
    }

    @Override
    public void fond() {
        Reader in = null;
        BufferedReader br =null;
        try {
            in = new FileReader("user.txt");
            br = new BufferedReader(in);
            String line;
            while ((line=br.readLine())!=null){
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void delete(String name) {
       /*1.文件内容读取出来，保存到集合
       * 2.判断集合中是否存在用户名为name的对象
       * 3.若不存在，提示不存在
       * 4.若存在，将集合中该对象删除
       * 5.把集合中的内容重新写入文件（不是追加写）*/
       BufferedReader br =null;
        ArrayList<User> list = new ArrayList<User>();
        try {
            br = new BufferedReader(new FileReader("user.txt"));
            String line;
            while ((line=br.readLine())!=null){
                String[] s = line.split("-");
                User user = new User(s[0],s[1],s[2]);
                list.add(user);
            }
            /*2.判断是否存在*/
            boolean flag=false;
            for (int i=0;i<list.size();i++){
                if (list.get(i).getName().equals(name)){
                    /*存在*/
                    flag=true;
                    User u =list.get(i);
                    list.remove(u);
                    /*把集合中的内容重新写入文件*/

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

